在 Termux 上利用 chroot 运行 Ubuntu

Termux is an Android terminal emulator and Linux environment app that works directly with no rooting or setup required.

Termux 是一个强大的 Android 终端模拟器和 Linux 环境应用,但有时你可能需要在 Android 手机上获得更完整的 Linux 发行版功能。通过 chroot,我们将得以在 Termux 中运行完整的 Ubuntu 系统。本文将详细介绍实现这一目标的步骤。

与 proot 方案的主要区别

  1. 需要 root 权限
  2. 性能更高
  3. 隔离性更强,后台几乎不被杀
  4. 可以运行更多原生 Linux 程序
  5. 稳定性更差

准备工作

  1. 确认设备已 root
  2. 安装 TermuxTermux:API(用于更好的权限管理)
  3. 利用 Magisk 安装 Magisk BuiltIn Busybox
  4. 安装必要工具:
1
2
3
pkg update && pkg upgrade
pkg install root-repo
pkg install tsu wget nano

1. 下载 Ubuntu rootfs

1
2
3
wget http://cdimage.ubuntu.com/ubuntu-base/jammy/daily/current/jammy-base-arm64.tar.gz
mkdir chroot
tar xpf jammy-base-arm64.tar.gz -C chroot

2. 准备 chroot 环境

创建 start-chroot.sh 脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/sh

# Ubuntu档案系统所在路径

UBUNTUPATH="/data/user/0/com.termux/files/home/chroot/"

# 挂载目录

busybox mount -o remount,dev,suid /data
busybox mount --bind /dev $UBUNTUPATH/dev
busybox mount --bind /sys $UBUNTUPATH/sys
busybox mount --bind /proc $UBUNTUPATH/proc
busybox mount -t devpts devpts $UBUNTUPATH/dev/pts

# Electron Apps需要/dev/shm

busybox mount -t tmpfs -o size=256M tmpfs $UBUNTUPATH/dev/shm

# 挂载内部存储空间

busybox mount --bind /sdcard $UBUNTUPATH/sdcard

# chroot至Ubuntu

busybox chroot $UBUNTUPATH /bin/su - root

# 取消挂载

busybox umount $UBUNTUPATH/dev/shm
busybox umount $UBUNTUPATH/dev/pts
busybox umount $UBUNTUPATH/dev
busybox umount $UBUNTUPATH/proc
busybox umount $UBUNTUPATH/sys
busybox umount $UBUNTUPATH/sdcard

赋予执行权限:

1
chmod +x start-ubuntu-chroot.sh

脚本来自Ivon的部落格,万分感谢大佬的分享。
如果提示 /dev/shm 目录不存在,需要手动用 MT管理器 创建,直接在 Termux 里 mkdir 会失败。

初始化 Ubuntu 系统

进入 chroot 环境后:

1
2
3
apt update
apt upgrade -y
apt install sudo nano bash-completion

Troubleshooting

1. 网络问题

如果网络不可用,尝试:

1
2
# 在 chroot 外(Termux 中)
cp /etc/resolv.conf ~/ubuntu-chroot/etc/resolv.conf

2. 语言环境问题

1
2
apt install locales
locale-gen zh_CN.UTF-8

3. 用户管理

1
2
3
4
5
6
7
8
adduser android
usermod -aG sudo android
groupadd -g 3001 aid_bt
groupadd -g 3002 aid_bt_net
groupadd -g 3003 aid_inet
groupadd -g 3004 aid_net_raw
groupadd -g 3005 aid_admin
usermod -a -G aid_bt,aid_bt_net,aid_inet,aid_net_raw,aid_admin root

4. Could not open session… 的错误

用 MT管理器 手动删除 /etc/pam.d/su-l 文件中
session optional pam_keyinit.so force revoke这一行。

重要注意事项

  1. 安全警告:chroot 不是完全安全的容器,root 用户仍可突破限制

  2. 稳定性:不当卸载可能导致文件系统损坏,务必使用卸载脚本

  3. 资源使用:chroot 环境会占用更多系统资源

  4. 兼容性:某些 Android 内核可能缺少必要的 Linux 功能

退出和清理

  1. 退出 chroot 环境:exit
  2. 如需删除容器,删除前务必确认已经取消挂载!